package com.apache.tools;

/**
 * 正则表达式工具，包含如下功能：

 * <p>
 * 判断一个字符串是否为：double型、int型、long型
 * <p>
 *  
 * author dyhou
 * 
 */
public class RegexUtil {

	/**
	 * @param str      待验证的字符串
	 * @param regexStr 正则表达式
	 * @param isTrim   为true去掉str空格后再比较；为false不取出空格，直接比较。
	 * @return boolean 为true表示参数str匹配regexStr；为false表示参数str不匹配regexStr。

	 */
	private static boolean isMatches(String str, String regexStr, boolean isTrim) {
		if (null == str || null == regexStr) {
			return false;
		}

		if (isTrim) {
			str = str.trim();
		}
		return str.matches(regexStr);
	}

	/**
	 * 判断一个字符串是否为 整数
	 * 
	 * @param str      待验证的字符串
	 * @param isTrim   是否忽略首尾空格
	 * @return boolean 为true表示是，为false表示否。

	 */
	public static boolean isInt(String str, boolean isTrim) {
		return isMatches(str, RegexStr.Num.INT_ALL, isTrim);
	}

	/**
	 * 判断一个字符串是否为正整数
	 * 
	 * @param str      待验证的字符串
	 * @param isTrim   是否忽略首尾空格
	 * @return boolean 为true表示是；为false表示否。

	 */
	public static boolean isIntPlus(String str, boolean isTrim) {
		return isMatches(str, RegexStr.Num.INT_PLUS, isTrim);
	}

	/**
	 * 判断一个字符串是否为负整数
	 * 
	 * @param str      待验证的字符串
	 * @param isTrim   是否忽略首尾空格
	 * @return boolean 为true表示是；为false表示否。

	 */
	public static boolean isIntDec(String str, boolean isTrim) {
		return isMatches(str, RegexStr.Num.INT_DEC, isTrim);
	}

	/**
	 * 判断一个字符串是否为 长整型

	 * @param str      待验证的字符串
	 * @param isTrim   是否忽略首尾空格
	 * @return boolean 为true表示是；为false表示否。
	 */
	public static boolean isLong(String str, boolean isTrim) {
		return isMatches(str, RegexStr.Num.LONG_ALL, isTrim);
	}

	/**
	 * 判断一个字符串是否为 正 长整型

	 * @param str      待验证的字符串
	 * @param isTrim   是否忽略首尾空格
	 * @return boolean 为true表示是；为false表示否。

	 */
	public static boolean isLongPlus(String str, boolean isTrim) {
		return isMatches(str, RegexStr.Num.LONG_PLUS, isTrim);
	}

	/**
	 * 判断一个字符串是否为 负 长整型

	 * @param str      待验证的字符串
	 * @param isTrim   是否忽略首尾空格
	 * @return boolean 为true表示是；为false表示否。
	 */
	public static boolean isLongDec(String str, boolean isTrim) {
		return isMatches(str, RegexStr.Num.LONG_DEC, isTrim);
	}

	/**
	 * 判断一个字符串是否为 double型

	 * @param str      待验证的字符串
	 * @param isTrim   是否忽略首尾空格
	 * @param acceptE  是否兼容科学记数法。true：接受；false：不接受。
	 * @return boolean 为true表示是；为false表示否。

	 */
	public static boolean isDouble(String str, boolean isTrim, boolean acceptE) {
		if (acceptE) {
			return isMatches(str, RegexStr.Num.DOUBLE_E_ALL, isTrim);
		} else {
			return isMatches(str, RegexStr.Num.DOUBLE_ALL, isTrim);
		}

	}

	/**
	 * 判断一个字符串是否为 正 double型

	 * @param str      待验证的字符串
	 * @param isTrim   是否忽略首尾空格
	 * @param acceptE  是否兼容科学记数法。true：接受；false：不接受。
	 * @return boolean 为true表示是；为false表示否。

	 */
	public static boolean isDoublePlus(String str, boolean isTrim, boolean acceptE) {
		if (acceptE) {
			return isMatches(str, RegexStr.Num.DOUBLE_E_PLUS, isTrim);
		} else {
			return isMatches(str, RegexStr.Num.DOUBLE_PLUS, isTrim);
		}

	}

	/**
	 * 判断一个字符串是否为 double型负数

	 * @param str      待验证的字符串
	 * @param isTrim   是否忽略首尾空格
	 * @param acceptE  是否兼容科学记数法。true：接受；false：不接受。
	 * @return boolean 为true表示是；为false表示否。

	 */
	public static boolean isDoubleDec(String str, boolean isTrim, boolean acceptE) {
		if (acceptE) {
			return isMatches(str, RegexStr.Num.DOUBLE_E_DEC, isTrim);
		} else {
			return isMatches(str, RegexStr.Num.DOUBLE_DEC, isTrim);
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		boolean b = RegexUtil.isInt("", false);
		System.out.println(b);

	}
}
